Generic Singleton Factory Method এমন একটি প্যাটার্ন যেখানে একটি সিঙ্গলটন অবজেক্ট তৈরি এবং প্রদান করা হয়, যা জেনেরিক টাইপ ব্যবহার করে টাইপ-সেইফটি নিশ্চিত করে। এটি বিশেষত কোডের পুনঃব্যবহারযোগ্যতা বাড়ায় এবং টাইপ সংক্রান্ত ত্রুটি কমায়।
Generic Singleton Factory Method কী?
- Generic Singleton: এটি একটি সিঙ্গলটন অবজেক্ট যা একটি নির্দিষ্ট জেনেরিক টাইপের জন্য কাজ করে।
- Factory Method: একটি মেথড যা সিঙ্গলটন ইনস্ট্যান্স তৈরি বা রিটার্ন করে।
- উদ্দেশ্য: কোডকে টাইপ-সেইফ করার পাশাপাশি একাধিক টাইপের জন্য একটি সাধারণ সিঙ্গলটন অবজেক্ট প্রদান করা।
Generic Singleton Factory Method এর প্রয়োগ
1. Generic Singleton Class
public class SingletonFactory {
// Private static instance (generic)
private static final SingletonFactory INSTANCE = new SingletonFactory();
// Private constructor to prevent instantiation
private SingletonFactory() {}
// Generic Factory Method
public static <T> T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException {
return clazz.newInstance();
}
}
ব্যবহারের উদাহরণ
2. Simple Example
public class Main {
public static void main(String[] args) {
try {
// Getting instances of different classes
String strInstance = SingletonFactory.getInstance(String.class);
Integer intInstance = SingletonFactory.getInstance(Integer.class);
System.out.println("String Instance: " + strInstance);
System.out.println("Integer Instance: " + intInstance);
} catch (Exception e) {
e.printStackTrace();
}
}
}
আউটপুট:
String Instance:
Integer Instance: 0
Refined Implementation: Singleton with Predefined Instances
কখনও কখনও পূর্বনির্ধারিত ইনস্ট্যান্স ব্যবহার করে টাইপ অনুযায়ী সিঙ্গলটন তৈরি করা হয়। উদাহরণস্বরূপ:
3. Predefined Singleton Instances
import java.util.HashMap;
import java.util.Map;
public class SingletonFactory {
// Map to store singletons
private static final Map<Class<?>, Object> instances = new HashMap<>();
static {
instances.put(String.class, "");
instances.put(Integer.class, 0);
instances.put(Double.class, 0.0);
}
// Generic Factory Method
@SuppressWarnings("unchecked")
public static <T> T getInstance(Class<T> clazz) {
return (T) instances.get(clazz);
}
}
4. ব্যবহার:
public class Main {
public static void main(String[] args) {
// Getting predefined instances
String str = SingletonFactory.getInstance(String.class);
Integer num = SingletonFactory.getInstance(Integer.class);
Double dbl = SingletonFactory.getInstance(Double.class);
System.out.println("String Instance: " + str);
System.out.println("Integer Instance: " + num);
System.out.println("Double Instance: " + dbl);
}
}
আউটপুট:
String Instance:
Integer Instance: 0
Double Instance: 0.0
Advanced Example: Thread-Safe Generic Singleton Factory
5. Thread-Safe Implementation
import java.util.concurrent.ConcurrentHashMap;
public class ThreadSafeSingletonFactory {
private static final ConcurrentHashMap<Class<?>, Object> instances = new ConcurrentHashMap<>();
// Generic Factory Method
public static <T> T getInstance(Class<T> clazz) {
return (T) instances.computeIfAbsent(clazz, cls -> {
try {
return cls.getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
}
6. ব্যবহার:
public class Main {
public static void main(String[] args) {
String str1 = ThreadSafeSingletonFactory.getInstance(String.class);
String str2 = ThreadSafeSingletonFactory.getInstance(String.class);
Integer num1 = ThreadSafeSingletonFactory.getInstance(Integer.class);
Integer num2 = ThreadSafeSingletonFactory.getInstance(Integer.class);
System.out.println("String Instances are same: " + (str1 == str2));
System.out.println("Integer Instances are same: " + (num1 == num2));
}
}
আউটপুট:
String Instances are same: true
Integer Instances are same: true
Generic Singleton Factory Method এর সুবিধা
- টাইপ-সেইফটি: প্রয়োজনীয় টাইপ রানটাইমে না জানালেও, কম্পাইল টাইমে টাইপ চেকিং নিশ্চিত করা হয়।
- কোড পুনঃব্যবহারযোগ্যতা: একই প্যাটার্ন দিয়ে বিভিন্ন টাইপের জন্য কাজ করা যায়।
- সিঙ্গল ইনস্ট্যান্স: একটি নির্দিষ্ট টাইপের জন্য একই ইনস্ট্যান্স প্রদান করা হয়।
- থ্রেড-সেফটি: থ্রেড-সেফ ডেটা স্ট্রাকচার ব্যবহার করে কনকারেন্ট প্রোগ্রামিং সহজ হয়।
- Generic Singleton Factory Method টাইপ-সেইফ এবং ডাইনামিক প্রোগ্রামিংয়ের জন্য গুরুত্বপূর্ণ।
- এটি বড় স্কেলের প্রজেক্টে কোড রিডেবিলিটি, মডুলারিটি, এবং পারফরম্যান্স উন্নত করতে ব্যবহৃত হয়।
- Thread-safe এবং Predefined Instance প্যাটার্ন বড় অ্যাপ্লিকেশন ডেভেলপমেন্টে কার্যকর।
Content added By
Read more